Modern microprocessors are much faster than the memory where the program is stored in, which means that the program instructions cannot be read fast enough to keep the microprocessor busy if the instructions are read from the main memory. Adding a cache, which is a small amount of very fast memory to each processor, can speed up processing time by providing faster access to needed instructions.
Prefetching is the process where anticipated instructions are loaded into the cache before being requested by the processor. Modern systems have evolved into multi-cache systems where each processor, or each core of the processor may have one or two levels of cache dedicated to each core/processor, and one or more additional cache levels that are shared among cores/processors. Each successive level of cache away from the core/processor may be larger but slower than the preceding cache levels. Prefetching from the main memory to a processor cache, such as level 1 or level 2 cache, can provide low latency access to the data, but since the size of the processor caches are small, data that is not used right away, or datasets which are larger than the size of the cache, can cause resource conflicts and upsets (cache trashing).
The above-described description is merely intended to provide a contextual overview of current techniques for performing and is not intended to be exhaustive.